//package com.project.aspect;
//
//import org.apache.ibatis.io.Resources;
//import org.apache.ibatis.session.SqlSession;
//import org.apache.ibatis.session.SqlSessionFactory;
//import org.apache.ibatis.session.SqlSessionFactoryBuilder;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//import java.io.Reader;
//import java.lang.reflect.Field;
//
//@Component
//@Aspect
//public class ServiceAsPect2 {
//    private static SqlSessionFactory factory;
//    static{
//        try {
//            Reader r = Resources.getResourceAsReader("mybatis.cfg.xml");
//            factory = new SqlSessionFactoryBuilder().build(r);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    @Around("execution(* com.project.service..*.*(..))")
//    public Object around(ProceedingJoinPoint jp){
//
//        SqlSession session = factory.openSession();
//        try {
//            //得到目标对象
//            Object targetObj = jp.getTarget();
//            //得到属性列表
//            Field[] fieldArray = targetObj.getClass().getDeclaredFields();
//            for(Field f : fieldArray){
//                if(f.getType().isInterface()){
//                    f.setAccessible(true);
//                    //得到mapper接口实现类对象
//                    Object mapperObj = session.getMapper(f.getType());
//                    f.set(targetObj,mapperObj);
//                }
//            }
//
//            //执行目标方法，得到方法执行后的返回值
//            Object returnObj = jp.proceed();
//            //提交事务
//            session.commit();
//            return returnObj;
//        } catch (Throwable throwable) {
//            throwable.printStackTrace();
//            //回滚事务
//            session.rollback();
//        }finally{
//            //关闭session
//            session.close();
//        }
//
//        return null;
//    }
//}